home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / serien / purity / nr.42 / includes3v1 / includes3v1.lha / Exec / Tasks.i < prev    next >
Text File  |  1994-12-04  |  4KB  |  136 lines

  1. {
  2.     Tasks.i for PCQ Pascal
  3.  
  4.     Every Amiga Task has one of these Task structures associated with it.
  5.     To find yours, use FindTask(Nil).  AmigaDOS processes tack a few more
  6.     values on to the end of this structure, which is the difference between
  7.     Tasks and Processes.
  8. }
  9.  
  10. {$I "Include:exec/nodes.i"}
  11. {$I "Include:exec/lists.i"}
  12.  
  13. type
  14.   
  15.     Task = record
  16.         tc_Node         : Node;
  17.         tc_Flags        : Byte;
  18.         tc_State        : Byte;
  19.         tc_IDNestCnt    : Byte;         { intr disabled nesting         }
  20.         tc_TDNestCnt    : Byte;         { task disabled nesting         }
  21.         tc_SigAlloc     : Integer;      { sigs allocated                }
  22.         tc_SigWait      : Integer;      { sigs we are waiting for       }
  23.         tc_SigRecvd     : Integer;      { sigs we have received         }
  24.         tc_SigExcept    : Integer;      { sigs we will take excepts for }
  25.         tc_TrapAlloc    : Short;        { traps allocated               }
  26.         tc_TrapAble     : Short;        { traps enabled                 }
  27.         tc_ExceptData   : Address;      { points to except data         }
  28.         tc_ExceptCode   : Address;      { points to except code         }
  29.         tc_TrapData     : Address;      { points to trap data           }
  30.         tc_TrapCode     : Address;      { points to trap code           }
  31.         tc_SPReg        : Address;      { stack pointer                 }
  32.         tc_SPLower      : Address;      { stack lower bound             }
  33.         tc_SPUpper      : Address;      { stack upper bound + 2         }
  34.         tc_Switch       : Address;      { task losing CPU               }
  35.         tc_Launch       : Address;      { task getting CPU              }
  36.         tc_MemEntry     : List;         { allocated memory              }
  37.         tc_UserData     : Address;      { per task data                 }
  38.     end;
  39.     TaskPtr = ^Task;
  40.  
  41. {
  42.  * Stack swap structure as passed to StackSwap()
  43.  }
  44.   StackSwapStruct = Record
  45.         stk_Lower       : Address;      { Lowest byte of stack }
  46.         stk_Upper       : Integer;      { Upper end of stack (size + Lowest) }
  47.         stk_Pointer     : Address;      { Stack pointer at switch point }
  48.   end;
  49.   StackSwapStructPtr = ^StackSwapStruct;
  50.  
  51.  
  52.  
  53. {----- Flag Bits ------------------------------------------}
  54.  
  55. const
  56.  
  57.     TB_PROCTIME         = 0;
  58.     TB_ETASK            = 3;
  59.     TB_STACKCHK         = 4;
  60.     TB_EXCEPT           = 5;
  61.     TB_SWITCH           = 6;
  62.     TB_LAUNCH           = 7;
  63.  
  64.     TF_PROCTIME         = 1;
  65.     TF_ETASK            = 8;
  66.     TF_STACKCHK         = 16;
  67.     TF_EXCEPT           = 32;
  68.     TF_SWITCH           = 64;
  69.     TF_LAUNCH           = 128;
  70.  
  71. {----- Task States ----------------------------------------}
  72.  
  73.     TS_INVALID          = 0;
  74.     TS_ADDED            = 1;
  75.     TS_RUN              = 2;
  76.     TS_READY            = 3;
  77.     TS_WAIT             = 4;
  78.     TS_EXCEPT           = 5;
  79.     TS_REMOVED          = 6;
  80.  
  81. {----- Predefined Signals -------------------------------------}
  82.  
  83.     SIGB_ABORT          = 0;
  84.     SIGB_CHILD          = 1;
  85.     SIGB_BLIT           = 4;
  86.     SIGB_SINGLE         = 4;
  87.     SIGB_INTUITION      = 5;
  88.     SIGB_DOS            = 8;
  89.  
  90.     SIGF_ABORT          = 1;
  91.     SIGF_CHILD          = 2;
  92.     SIGF_BLIT           = 16;
  93.     SIGF_SINGLE         = 16;
  94.     SIGF_INTUITION      = 32;
  95.     SIGF_DOS            = 256;
  96.  
  97.  
  98.  
  99.  
  100. Procedure AddTask(task : TaskPtr; initialPC, finalPC : Address);
  101.     External;
  102.  
  103. Function AllocSignal(signalNum : Integer) : Integer;
  104.     External;
  105.  
  106. Function AllocTrap(trapNum : Integer) : Integer;
  107.     External;
  108.  
  109. Function FindTask(name : String) : TaskPtr;
  110.     External;
  111.  
  112. Procedure FreeSignal(signalNum : Integer);
  113.     External;
  114.  
  115. Procedure FreeTrap(signalNum : Integer);
  116.     External;
  117.  
  118. Procedure RemTask(task : TaskPtr);
  119.     External;
  120.  
  121. Function SetExcept(newSignals, signalMask : Integer) : Integer;
  122.     External;
  123.  
  124. Function SetSignal(newSignals, signalMask : Integer) : Integer;
  125.     External;
  126.  
  127. Function SetTaskPri(task : TaskPtr; priority : Integer) : Integer;
  128.     External;
  129.  
  130. Procedure Signal(task : TaskPtr; signals : Integer);
  131.     External;
  132.  
  133. Function Wait(signals : Integer) : Integer;
  134.     External;
  135.  
  136.